package com.example.myapplication.viewpager.fragment;

import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;

import com.example.myapplication.R;
import com.example.myapplication.databinding.ActivityFragmentVpactivityBinding;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

import java.util.ArrayList;
import java.util.List;

public class FragmentVPActivity extends AppCompatActivity {

    private ActivityFragmentVpactivityBinding binding;
    private final String[] tabTitles = {"主页", "我的"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        binding = ActivityFragmentVpactivityBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        List<Fragment> fragmentList = new ArrayList<>();
        fragmentList.add(new HomeFragment());
        fragmentList.add(new MineFragment());

        MyPagerAdapter pagerAdapter = new MyPagerAdapter(this, fragmentList);
        binding.fragmentViewPager.setAdapter(pagerAdapter);
        // 禁用预加载
        binding.fragmentViewPager.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT);

        // 动态自定义Tab
        new TabLayoutMediator(binding.tabMode, binding.fragmentViewPager, (tab, position) -> {
            // 自定义TabView
            TextView tabView = new TextView(FragmentVPActivity.this);
            tabView.setText(tabTitles[position]);
            tabView.setGravity(Gravity.CENTER);
            tabView.setTextSize(position == 0 ? 20: 15);

            // 将tabItem绑定到tab
            tab.setCustomView(tabView);
        }).attach();

        // 监听viewPager页面切换
        binding.fragmentViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            // 该方法开始滑动到滑动结束前不断调用
            // 参数一：position表示当前页面的位置（当前页面在翻页适配器中的下标，索引），因为不断调用，position也可能表示目标页面的下标
            // 参数二：positionOffset表示页面偏移的百分比，翻页时不断增大（不断趋近1），最后翻页完成时突变成0
            // 这个参数在左滑时由1趋近0，右滑由0趋近1
            // 参数三：positionOffsetPixel表示页面完成滑动的像素数，变化趋势和positionOffset一样
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            // 该方法在页面切换成功后调用（滑动前与滑动后不是同一页面）
            // position表示当前页面在适配器中的下标，索引
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                //获取总的TabLayout的个数
                int tabCount = binding.tabMode.getTabCount();

                //遍历选择所有的Tab,如果判断是当前的Tab则进行相关操作，不是则还原操作
                for (int i = 0; i < tabCount; i++) {
                    TabLayout.Tab tab = binding.tabMode.getTabAt(i); //取得tab
                    //通过tab获取tabView
                    TextView tabView = (TextView) tab.getCustomView();

                    if (tab.getPosition() == position) {
                        tabView.setTextSize(20);
                        tabView.setTypeface(Typeface.DEFAULT_BOLD);
                        tabView.setTextColor(Color.parseColor("#B22222"));
                    } else {
                        tabView.setTextSize(15);
                        tabView.setTypeface(Typeface.MONOSPACE);
                        tabView.setTextColor(Color.parseColor("#000000"));
                    }
                }
            }

            // 该方法在页面滑动状态改变时调用
            // ViewPager2.SCROLL_STATE_IDLE表示空闲状态，当前页面处于静止状态，没有要翻页的趋势 == 0
            // ViewPager2.SCROLL_STATE_DRAGGING表示拖动状态，用户正在拖动页面，准备进行翻页滚动 == 1
            // ViewPager2.SCROLL_STATE_SETTLING表示滚动状态，页面正在自动滚动到目标页面 == 2
            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });

        // 监听tabLayout
        binding.tabMode.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            //选中时的变化
            @Override
            public void onTabSelected(TabLayout.Tab tab) {

            }

            //未选中时的变化
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }

            //重复选中的变化，当用户再次点击已经选中的Tab时，这个方法就会被调用。
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                // 处理标签重新选择，如果需要
                TextView tabView = (TextView) tab.getCustomView();
                tabView.setTextSize(tabView.getTextSize() < 30 ? tabView.getTextSize() + 1 : 30);
            }
        });


    }
}